package com.tianyadu.security.core.social.weix.config;


import com.tianyadu.security.core.properties.SecurityProperties;
import com.tianyadu.security.core.properties.propertieVO.QQProperties;
import com.tianyadu.security.core.properties.propertieVO.WeixinProperties;
import com.tianyadu.security.core.social.TianyaduConnectView;
import com.tianyadu.security.core.social.qq.connet.QQConnectionFactory;
import com.tianyadu.security.core.social.weix.connect.WeixinConnectionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.social.config.annotation.ConnectionFactoryConfigurer;
import org.springframework.social.config.annotation.SocialConfigurerAdapter;
import org.springframework.social.connect.ConnectionFactory;
import org.springframework.social.connect.ConnectionFactoryLocator;
import org.springframework.social.connect.UsersConnectionRepository;
import org.springframework.web.servlet.View;

/**
 * @FileName: WeixinAutoConfiguration
 * @Description:  微信登录配置
 * @author: xueyj
 * @create: 2018-12-24 18:59
 */
@Configuration
@ConditionalOnProperty(prefix = "tianyadu.security.social.weixin", name = "app-id")
public class WeixinAutoConfiguration extends SocialConfigurerAdapter {

	@Autowired
	private SecurityProperties securityProperties;

	@Override
	public void addConnectionFactories(ConnectionFactoryConfigurer configurer,
									   Environment environment) {
		configurer.addConnectionFactory(createConnectionFactory());
	}

	/**
	 * (non-Javadoc)
	 * 
	 * @see org.springframework.social.config.annotation.SocialConfigurerAdapter
	 * #createConnectionFactory()
	 */
	protected ConnectionFactory<?> createConnectionFactory() {
		WeixinProperties weixinConfig = securityProperties.getSocial().getWeixin();
		return new WeixinConnectionFactory(weixinConfig.getProviderId(), weixinConfig.getAppId(),
				weixinConfig.getAppSecret());
	}

	// 后补：做到处理注册逻辑的时候发现的一个bug：登录完成后，数据库没有数据，但是再次登录却不用注册了
	// 就怀疑是否是在内存中存储了。结果果然发现这里父类的内存ConnectionRepository覆盖了SocialConfig中配置的jdbcConnectionRepository
	// 这里需要返回null，否则会返回内存的 ConnectionRepository
	@Override
	public UsersConnectionRepository getUsersConnectionRepository(ConnectionFactoryLocator connectionFactoryLocator) {
		return null;
	}

	/**
	  * @Description: 微信绑定/解绑视图
	  * connect/weixinConnect：解除绑定视图
	  * connect/weixinConnected：绑定视图
	  * @param:
	  * @return:
	  * @author:
	  * @date:   2018/12/25 15:53
	  */
	@Bean({"connect/weixinConnect", "connect/weixinConnected"})
	@ConditionalOnMissingBean(name = "weixinConnectedView")
	public View weixinConnectedView() {
		return new TianyaduConnectView();
	}
}
